home *** CD-ROM | disk | FTP | other *** search
/ Tech Win 1999 February / TECH Win 02-1999 Disc A.iso / ols / lzh / tcl211.lzh / DLLSRC.lzh / timer.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-27  |  3.1 KB  |  149 lines

  1. #include "tcdll.h"
  2.  
  3. // タイマー用構造体
  4. typedef struct _tagTimerStruct
  5. {
  6.     char name[80];
  7.     UINT id;
  8.     int minute;
  9.     int second;
  10. } TIMERSTRUCT;
  11. typedef TIMERSTRUCT* PTIMERSTRUCT;
  12.  
  13. extern HWND hwndTClockMain;
  14. extern HMENU hMenu;
  15.  
  16. PTIMERSTRUCT pTS = NULL;
  17. int nTimer = 0;
  18.  
  19. /*------------------------------------------------
  20.  タイマー開始
  21. --------------------------------------------------*/
  22. void StartTimer(UINT idTimer)
  23. {
  24.     char subkey[20];
  25.     PTIMERSTRUCT pTStemp;
  26.     int i, count;
  27.     UINT id;
  28.     
  29.     count = GetMyRegLong("", "TimerNum", 0);
  30.     for(i = 0; i < count; i++)
  31.     {
  32.         wsprintf(subkey, "Timer%d", i + 1);
  33.         id = GetMyRegLong(subkey, "ID", 0);
  34.         if(id == idTimer) break;
  35.     }
  36.     if(i == count) return;
  37.     
  38.     pTStemp = (PTIMERSTRUCT)GlobalAllocPtr(GHND,
  39.         sizeof(TIMERSTRUCT) * (nTimer + 1));
  40.     if(pTS && nTimer > 0)
  41.     {
  42.         int i;
  43.         for(i = 0; i < nTimer; i++)
  44.             pTStemp[i + 1] = pTS[i];
  45.         GlobalFreePtr(pTS);
  46.     }
  47.     nTimer++;
  48.     pTS = pTStemp;
  49.     
  50.     GetMyRegStr(subkey, "Name", pTS[0].name, "");
  51.     pTS[0].id = id;
  52.     pTS[0].minute = GetMyRegLong(subkey, "Minute", 10);
  53.     pTS[0].second = 0;
  54.     
  55.     if(hMenu) DestroyMenu(hMenu); hMenu = NULL;
  56. }
  57.  
  58. /*------------------------------------------------
  59.  タイマー中止
  60. --------------------------------------------------*/
  61. void StopTimer(int n)
  62. {
  63.     PTIMERSTRUCT pTStemp;
  64.     int i;
  65.     
  66.     if(!pTS) return;
  67.     pTStemp = NULL;
  68.     if(nTimer > 1)
  69.     {
  70.         pTStemp = (PTIMERSTRUCT)GlobalAllocPtr(GHND,
  71.             sizeof(TIMERSTRUCT) * (nTimer - 1));
  72.         for(i = 0; i < n; i++)
  73.             pTStemp[i] = pTS[i];
  74.         for(i = n; i < nTimer - 1; i++)
  75.             pTStemp[i] = pTS[i + 1];
  76.     }
  77.     GlobalFreePtr(pTS);
  78.     nTimer--;
  79.     pTS = pTStemp;
  80.     
  81.     if(hMenu) DestroyMenu(hMenu); hMenu = NULL;
  82. }
  83.  
  84. /*------------------------------------------------
  85.  終了処理
  86. --------------------------------------------------*/
  87. void ClearTimer(void)
  88. {
  89.     if(pTS) GlobalFreePtr(pTS); pTS = NULL;
  90.     nTimer = 0;
  91. }
  92.  
  93. /*------------------------------------------------
  94.  メニューにタイマー一覧を追加
  95. --------------------------------------------------*/
  96. void AppendTimerMenu(HMENU hm)
  97. {
  98.     int i;
  99.     
  100.     if(!pTS) return;
  101.     for(i = 0; i < nTimer; i++)
  102.         AppendMenu(hm, MF_STRING , 110+i, "  ");
  103. }
  104.  
  105. /*------------------------------------------------
  106.  メニューのタイマーに文字列を設定
  107. --------------------------------------------------*/
  108. void SetTimerMenu(HMENU hm)
  109. {
  110.     char s[100];
  111.     int i, m;
  112.     SYSTEMTIME t;
  113.     
  114.     if(pTS == NULL) return;
  115.     GetLocalTime(&t);
  116.     for(i = 0; i < nTimer; i++)
  117.     {
  118.         wsprintf(s, "  %s %02d:%02d",
  119.             pTS[i].name, pTS[i].minute, pTS[i].second);
  120.         ModifyMenu(hm, 110+i, MF_STRING|MF_BYCOMMAND, 110+i, s);
  121.     }
  122. }
  123.  
  124. /*------------------------------------------------
  125.  タイマー実行
  126. --------------------------------------------------*/
  127. void DoTimer(int minute, int second)
  128. {
  129.     int i, s;
  130.     
  131.     if(!pTS) return;
  132.     for(i = 0; i < nTimer; i++)
  133.     {
  134.         if(pTS[i].second == 0)
  135.         {
  136.             pTS[i].minute--;
  137.             pTS[i].second = 59;
  138.         }
  139.         else pTS[i].second--;
  140.         
  141.         if(pTS[i].minute <= 0 && pTS[i].second <= 0)
  142.         {
  143.             PostMessage(hwndTClockMain, WM_USER+7, 0, pTS[i].id);
  144.             StopTimer(i);
  145.             i--;
  146.         }
  147.     }
  148. }
  149.